package com.zonda.study.opengl.image;

import android.opengl.GLES20;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

/**
 * Created by zhuqiuzhu on 17/3/24.
 * java  array -> Buffer
 */

public class VertexArray {

    private final FloatBuffer mFloatBuffer;

    public VertexArray(float[] vertexData) {
        mFloatBuffer = ByteBuffer
                .allocateDirect(vertexData.length * Constants.BYTES_PER_FLOAT)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer()
                .put(vertexData);
    }

    /**
     * 关联属性与顶点数据的数组
     * @param dataOffset  顶点数据缓冲区读取的起始位置
     * @param attributeLocation 需要被设置属性的位置
     * @param componentCount 每个属性的计数器，或者是对于每个属性，有多少分量与每一个顶点关联
     * @param stride 当一个数组存储了多个属性时生效，它代表每个属性位置之间有多少 "跨距"
     */
    public void setVertexAttributePointer(int dataOffset, int attributeLocation,
                                          int componentCount, int stride) {

        //移动指针顶点缓存区初始读取位置
        mFloatBuffer.position(dataOffset);

        //把顶点数据链接到关联属性中
        GLES20.glVertexAttribPointer(attributeLocation, componentCount, GLES20.GL_FLOAT,
                false, stride, mFloatBuffer);

        //告知 OpenGL 关联属性已经可用来绘制了
        GLES20.glEnableVertexAttribArray(attributeLocation);

        //恢复指针到缓冲区的开头
        mFloatBuffer.position(0);
    }
}
